package com.itheima.exception_demo.exception_test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/*
    定义一个方法接收一个生日日期字符串(xxxx年xx月xx)
    main方法中让用户输入一个生日日期字符串，调用设计好的方法计算在地球上活了多少天。

    要求：如果解析发生异常，捕获异常，提示用户要重新输入生日日期字符串，直到输入正确的日期为止。

    思考：设计代此码的过程中想想什么时候捕获异常，什么时候声明异常？

 */
public class ExceptionTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个生日字符串:");
        while (true) {
            String birthday = sc.nextLine();// 545678
            try {
                getDays(birthday);
                break;
            } catch (ParseException e) {
                // public String getMessage() : 打印异常的 原因
                 System.out.println(e.getMessage());

                // public String toString() : 打印异常的 类型 + 原因
                // System.out.println(e.toString());

                // public void printStackTrace() : 打印异常的 类型 + 原因 + 位置  !!!!
                e.printStackTrace();

                // System.out.println("传入的生日格式有误, 请重新输入");
            }
        }
    }

    // 接收一个字符串类型的日期 , 计算活了多少天
    public static void getDays(String strDate) throws ParseException {// "2003年03月11日"
        // 创建解析器对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        // 解析
        Date d1 = sdf.parse(strDate);
        long time1 = d1.getTime();

        // 创建当前系统时间
        Date d2 = new Date();
        long time2 = d2.getTime();

        System.out.println((time2 - time1) / (1000 * 60 * 60 * 24));
    }
}
